using DG.Tweening;
using UnityEngine;

/// <summary>
/// 可收集物品类，处理物品被收集时的逻辑
/// </summary>
public class Collectable : MonoBehaviour 
{
    [Header("收集设置")]
    [Tooltip("收集时增加的资源数量")]
    public int addNum = 100;  // 收集该物品时增加的资源数值
    
    [Header("生命值设置")]
    [Tooltip("物品的最大生命值")]
    public int maxHealth = 100;  // 物品的最大生命值
    
    private int health;       // 物品当前生命值（运行时实际值）
    
    private void Awake()
    {
        // 初始化时将最大生命值赋给当前生命值
        health = maxHealth;
    }

    /// <summary>
    /// 改变物品生命值
    /// </summary>
    /// <param name="num">生命值变化量（正数为治疗，负数为伤害）</param>
    public void ChangeHealth(int num)
    {
        // 修改生命值并限制在0~Health之间
        health += num;
        health = Mathf.Clamp(health, 0, maxHealth);
        
        // 生命值<=0且未被收集时触发收集逻辑
        if (health <= 0)
        {
            Destroy(gameObject);  // 销毁物体

            UIManager.Instance.AddStoneNum(addNum);  // UI增加资源计数

            UIManager.Instance.SetTips($"石头资源 + {addNum}");
            
            return;
        }
        else
        {
            // 生命值>0时的受击效果
            transform.DOComplete();  // 先完成可能正在进行的动画
            transform.DOShakeScale(.5f, .5f, 10, 90, true);  // 执行缩放震动效果
        }
    }
}